package com.qfedu.zf.minio.controller;


import com.qfedu.zf.common.vo.R;
import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import io.minio.Result;
import io.minio.messages.Item;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@RequestMapping("/api/minio")
@RestController
public class MinioController {

    @Autowired
    public MinioClient minioClient;


    /**
     * 上传文件的接口
     */
    @PostMapping("/upload")
    public R uploadFile(@RequestPart MultipartFile file) {

        if (file != null && !file.isEmpty()) {

            // 设置文件名
            // file.getOriginalFilename() 原生的文件名
            String fileName = UUID.randomUUID().toString() + file.getOriginalFilename();


            try {
                InputStream inputStream = file.getInputStream();
                // 上传文件
                minioClient.putObject("java2401", fileName, inputStream, new PutObjectOptions(file.getSize(), -1));

                file.getInputStream().close(); // 关闭输入流
                // 得到上传文件的路径   文件在minio中的url  可以直接使用
                String url = minioClient.getObjectUrl("java2401", fileName);

                return R.ok(url);
            } catch (Exception e) {
                e.printStackTrace();
                return R.fail("传文件错误");
            }

        }
        return R.fail("传文件错误");
    }

    /**
     * 文件列表接口
     *
     */

    @GetMapping("/getFileList")
    public R getFileList(){
        try {

            // 获取对应 文件夹下的内容
            Iterable<Result<Item>> iterable = minioClient.listObjects("java2401");

            List<String> urls = new ArrayList<>();

            for (Result<Item> itemResult : iterable) {
                urls.add(itemResult.get().objectName());
            }
            return R.ok(urls);
        } catch (Exception e) {
            e.printStackTrace();
            return R.fail("读取文件列表失败");
        }
    }

}
